Observer with Boost::Signals2

Boost::Signal2 라이브러리는 std::signal에 해당하는 타입을 제공한다.
시그널은 함수나 람다를 전달하여 수신 등록, 수신 해제, 알림 받기 등을 처리할 수 있다.
template <typename T>
struct Observable{
signal<void(T&, const string&)> property_changed;
};
struct person: Observable<Person>{
// ...
void set_age(const int age){
if(this->age==age) return;
this->age=age;
property_changed(*this, "age");
}
};
//
Person p{123};
auto conn=p.property_changed.connect([](Person&, const string& prop_name){
cout<<prop_name<<" has been changed"<<endl";
});
p.set_age(20);
conn.disconnect();